/**
 * 1. 从舞台上移除(完全移除)
 * 		a. 移除元件、实例
 * 		b. 移除侦听
 * 	. 再次被加载到舞台上
 *		a。 由触发Event.ADDED_TO_STAGE,进入initUI 重新实例化元件，实例
 * 		b. 添加侦听
 * 		c. 设置位置
 * 从舞台移除后，就清空了整个类中的元素，释放掉所有资源，再次被加载到舞台时候，所有的内容会重新加载实例一遍，
 * 这样做的好处是 这个类的实例还是原先的，因此，MVC中Mediator不需要重新注册
 * 
 * 2。 从舞台上移除(类似隐藏)
 * 		a. 不移除元件、实例
 * 		b. 不移除侦听
 *  。 再次被加载到舞台上
 * 		a。 触发Event.ADDED_TO_STAGE, 但是不再进入initUI
 * 		b。 添加侦听
 * 		c。 设置位置(根据变量来设置，是否需要启用)
 * 移除后没有stage属性了的
 */

package com.alpheus.base
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class BaseComponent extends Sprite
	{
		public var remould:Boolean=true;//重新塑造   清除所有
		public var resize:Boolean=true;//是否侦听resize事件
		
		public var isInit:Boolean=false;
		
		public function BaseComponent(remould:Boolean=true,resize:Boolean=true)
		{
			this.remould=remould;
			this.resize=resize;
			
			this.addEventListener(Event.ADDED_TO_STAGE,__addedToStageHandle);
		}
		
		protected function __addedToStageHandle(e:Event):void
		{
			if(resize){
				stage.addEventListener(Event.RESIZE,__resizeHandle);
			}
			
			this.addEventListener(Event.REMOVED_FROM_STAGE,__removefromStageHandle);
			
			if(!isInit){
				initUI();
				isInit=!remould;
			}
			initEvent(true);
			initLocation();
			start();
		}
		
		protected function __resizeHandle(e:Event):void
		{
			initLocation();
		}		
		
		protected function __removefromStageHandle(event:Event):void
		{
			this.removeEventListener(Event.REMOVED_FROM_STAGE,__removefromStageHandle);
			dispose();
		}
		
		public function initUI():void
		{
			
		}
		
		public function initEvent(b:Boolean=true):void{
			if(b){
				
			}else{
				
			}
		}
		
		public function initLocation():void
		{
			
		}
		
		private function start():void
		{
			
		}
		
		public function dispose():void{
			if(resize){
				stage.removeEventListener(Event.RESIZE,__resizeHandle);
			}
			initEvent(false);
			if(remould){
				while(this.numChildren)this.removeChildAt(0);
			}
		}
	}
}